﻿/***************************************************************************

Copyright (c) Microsoft Corporation. All rights reserved.
This code is licensed under the Visual Studio SDK license terms.
THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF
ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY
IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR
PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.

***************************************************************************/

using System;
using Microsoft.VisualStudio;
using Microsoft.VisualStudio.Shell.Interop;
using Microsoft.VsSDK.UnitTestLibrary;

namespace VsXmlSorter_UnitTests
{
	static class UIShellServiceMock
	{
		private static GenericMockFactory uiShellFactory;

		#region UiShell Getters
		/// <summary>
		/// Returns an IVsUiShell that does not implement any methods
		/// </summary>
		/// <returns></returns>
		internal static BaseMock GetUiShellInstance()
		{
			if (uiShellFactory == null)
			{
				uiShellFactory = new GenericMockFactory("UiShell", new Type[] { typeof(IVsUIShell), typeof(IVsUIShellOpenDocument) });
			}
			BaseMock uiShell = uiShellFactory.GetInstance();
			return uiShell;
		}

		/// <summary>
		/// Get an IVsUiShell that implements SetWaitCursor, SaveDocDataToFile, ShowMessageBox
		/// </summary>
		/// <returns>uishell mock</returns>
		internal static BaseMock GetUiShellInstance0()
		{
			BaseMock uiShell = GetUiShellInstance();
			string name = string.Format("{0}.{1}", typeof(IVsUIShell).FullName, "SetWaitCursor");
			uiShell.AddMethodCallback(name, new EventHandler<CallbackArgs>(SetWaitCursorCallBack));

			name = string.Format("{0}.{1}", typeof(IVsUIShell).FullName, "SaveDocDataToFile");
			uiShell.AddMethodCallback(name, new EventHandler<CallbackArgs>(SaveDocDataToFileCallBack));

			name = string.Format("{0}.{1}", typeof(IVsUIShell).FullName, "ShowMessageBox");
			uiShell.AddMethodCallback(name, new EventHandler<CallbackArgs>(ShowMessageBoxCallBack));
			return uiShell;
		}
		#endregion

		#region Callbacks
		private static void SetWaitCursorCallBack(object caller, CallbackArgs arguments)
		{
			arguments.ReturnValue = VSConstants.S_OK;
		}

		private static void SaveDocDataToFileCallBack(object caller, CallbackArgs arguments)
		{
			arguments.ReturnValue = VSConstants.S_OK;
		}

		private static void ShowMessageBoxCallBack(object caller, CallbackArgs arguments)
		{
			arguments.ReturnValue = VSConstants.S_OK;
			arguments.SetParameter(10, (int)System.Windows.Forms.DialogResult.Yes);
		}

		#endregion
	}
}